#include<iostream>
#include<string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

const int VSIZE=203;    //size of vertex
int n;                  //number of vertex
int m[VSIZE][VSIZE];    //adjacency matrix
int f[VSIZE][VSIZE];
int s[VSIZE];
int t;

int findpath()
{
 int mark[VSIZE];
 int i,j;
 for(i=0;i<n;i++)mark[i]=0;
 t=1;s[t]=0;
 mark[0]=1;
 do {
   i=abs(s[t]);
   j=0;
   do {
     j++;
     if(mark[j]==0)
      {
       if(m[i][j]>f[i][j])
        {
         s[++t]=j;
         mark[j]=1;
        }
       else if(f[j][i]>0)
            {
             s[++t]=-j;
             mark[j]=1;
           }
      }
    }while(j<n&&i==abs(s[t]));
   if(i==abs(s[t]))t--;
  }while(t&&s[t]!=n-1);
 return (t>0);
}

void adjust()
{
 int i,j,k,x,z;
 k=1;i=s[k];z=2000000;
 do {
     k++;j=s[k];
     if(j<0)x=f[-j][i];
     else x=m[i][j]-f[i][j];
     if(x<z)z=x;
     i=abs(j);
  }while(k!=t);

 k=1;i=s[k];
 do {
    k++;j=s[k];
    if(j<0)f[-j][i]=f[-j][i]-z;
    else f[i][j]=f[i][j]+z;
    i=abs(j);
  }while(k!=t);
}

int maxflow()
{
 int i,j,max;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)f[i][j]=0;
 while(findpath())adjust();
 max=0;
 for(j=0;j<n;j++)
  max+=f[0][j];
 return max;
}

int main()
{
int mm=0,qq=0,ff=0,t1=0,t2=0,sign=0;
//freopen("in.txt","r",stdin);
while (scanf("%d%d",&mm,&qq)!=EOF)
{
sign=0;
t1=0;
t2=0;
memset(f,0,sizeof(f));
        memset(s,0,sizeof(s));
memset(m,0,sizeof(m));

t=0;

for (t1=1;t1<=mm;t1++)
 {
 for (t2=1;t2<=qq;t2++)
 {
 scanf("%d",&sign);
 if (sign==1)
   m[t1][t2+mm]=1;
 }
 }
 scanf("%d",&ff);
 for (t1=1;t1<=mm;t1++)
m[0][t1]=ff;
 for (t2=1+mm;t2<=mm+qq;t2++)
 m[t2][mm+qq+1]=1;
 n=mm+qq+2;
 if (maxflow()==qq)
 printf("Yes\n"); else printf("No\n");
}
return 0;
}
